home *** CD-ROM | disk | FTP | other *** search
- { dynamenu.pas -- Dynamic menus that change at runtime }
-
- program DM;
-
- {$R dynamenu.res}
-
- uses WinTypes, WinProcs, WObjects;
-
- const
-
- menu_Options = 0; { Position of 'Options' in menu bar }
- menu_Advanced = 1; { Position of 'Advanced' in menu bar }
-
- id_Menu = 100; { Menu resource ID }
- cm_FullMenus = 101; { Command IDs }
- cm_Quit = 102;
- cm_Item1 = 103;
- cm_Item2 = 104;
-
- type
-
- DMApplication = object(TApplication)
- procedure InitMainWindow; virtual;
- end;
-
- PDMWindow = ^DMWindow;
- DMWindow = object(TWindow)
- UsingFullMenus: Boolean;
- constructor Init(AParent: PWindowsObject; ATitle: PChar);
- procedure EnableFullMenus;
- procedure DisableFullMenus;
- procedure CMFullMenus(var Msg: TMessage);
- virtual cm_First + cm_FullMenus;
- procedure CMQuit(var Msg: TMessage);
- virtual cm_First + cm_Quit;
- procedure CMItem1(var Msg: TMessage);
- virtual cm_First + cm_Item1;
- procedure CMItem2(var Msg: TMessage);
- virtual cm_First + cm_Item2;
- end;
-
-
- { DMApplication }
-
- {- Initialize DMApplication object's window }
- procedure DMApplication.InitMainWindow;
- begin
- MainWindow := New(PDMWindow, Init(nil, 'Dynamic Menus'))
- end;
-
-
- { DMWindow }
-
- {- Construct DMWindow object }
- constructor DMWindow.Init(AParent: PWindowsObject; ATitle: PChar);
- begin
- TWindow.Init(AParent, ATitle);
- Attr.Menu := LoadMenu(HInstance, PChar(id_Menu));
- UsingFullMenus := false
- end;
-
- {- Add Exit command and Advanced menu }
- procedure DMWindow.EnableFullMenus;
- var
- Mh: HMenu; { Menu handle }
- begin
- {- Get handle to Options menu and append Exit command }
- Mh := GetSubMenu(Attr.Menu, menu_Options);
- AppendMenu(Mh, mf_String, cm_Quit, 'E&xit');
- {- Add new Advanced menu and two sub commands }
- Mh := CreatePopupMenu;
- if Mh <> 0 then
- begin
- AppendMenu(Attr.Menu, mf_Popup, Mh, '&Advanced');
- AppendMenu(Mh, mf_String or mf_Enabled, cm_Item1, 'Item1');
- AppendMenu(Mh, mf_String or mf_Grayed, cm_Item2, 'Item2')
- end;
- {- Redraw menu bar after making changes }
- DrawMenuBar(HWindow)
- end;
-
- {- Remove Exit command and Advanced menu }
- procedure DMWindow.DisableFullMenus;
- var
- Mh: HMenu; { Menu handle }
- begin
- {- Remove Exit command from Options menu }
- Mh := GetSubMenu(Attr.Menu, menu_Options);
- DeleteMenu(Mh, cm_Quit, mf_ByCommand);
- {- Delete Advanced menu and its sub commands }
- DeleteMenu(Attr.Menu, menu_Advanced, mf_ByPosition);
- DrawMenuBar(HWindow)
- end;
-
- {- Toggle full menus on and off }
- procedure DMWindow.CMFullMenus(var Msg: TMessage);
- var
- WCheck: Word;
- begin
- if UsingFullMenus then
- begin
- DisableFullMenus;
- WCheck := mf_ByCommand or mf_Unchecked;
- UsingFullMenus := false
- end else
- begin
- EnableFullMenus;
- WCheck := mf_ByCommand or mf_Checked;
- UsingFullMenus := true
- end;
- CheckMenuItem(Attr.Menu, cm_FullMenus, WCheck)
- end;
-
- {- Execute Options:Exit command }
- procedure DMWindow.CMQuit(var Msg: TMessage);
- begin
- CloseWindow
- end;
-
- {- Execute Advanced:Item1 command }
- procedure DMWindow.CMItem1(var Msg: TMessage);
- begin
- EnableMenuItem(Attr.Menu, cm_Item2, mf_ByCommand or mf_Enabled);
- EnableMenuItem(Attr.Menu, cm_Item1, mf_ByCommand or mf_Grayed)
- end;
-
- {- Execute Advanced:Item2 command }
- procedure DMWindow.CMItem2(var Msg: TMessage);
- begin
- EnableMenuItem(Attr.Menu, cm_Item1, mf_ByCommand or mf_Enabled);
- EnableMenuItem(Attr.Menu, cm_Item2, mf_ByCommand or mf_Grayed)
- end;
-
- var
-
- DMApp: DMApplication;
-
- begin
- DMApp.Init('DMApp');
- DMApp.Run;
- DMApp.Done
- end.
-
-
- {--------------------------------------------------------------
- Copyright (c) 1991 by Tom Swan. All rights reserved.
- Revision 1.00 Date: 2/20/1991
- ---------------------------------------------------------------}
-